#pragma once

// ....................................................................................................................
// Trieda IStringList
// ....................................................................................................................
class IStringList {
protected:
	IList FItems; // Zoznam retazcov
public:
	IStringList(void); // Konstruktor
	~IStringList(void); // Destruktor
public:
	void __fastcall Clear(void); // Uvolnenie zoznamu z pamate
	void __fastcall CreateCopy(IStringList *pSource); // Vytvorenie kopie obsahu objektu
	void __fastcall Assign(IStringList* pValue); // Skopirovanie obsahu objektu
	void __fastcall Sort(bool pDirection, INT32 pStart = 0, INT32 pCount = -1); // Zotriedenie zoznamu
public:
	void __fastcall PrepareForBinarySearch(void); // Priprava zoznamu na binarne vyhladavanie
	INT32 __fastcall BinarySearch(CONST_PCHAR pValue); // Najdenie pozicie zoznamu pomocou binarneho vyhladavania
public:
	INT32 __fastcall Add(CONST_PCHAR pValue, PVOID pData = NULL); // Zaradenie zaznamu na koniec
	INT32 __fastcall Add(CONST_PCHAR pValue, INT32 pLength, PVOID pData = NULL); // Zaradenie zaznamu na koniec
	INT32 __fastcall Insert(INT32 pIndex, CONST_PCHAR pValue, PVOID pData = NULL); // Zaradenie zaznamu na zadanu poziciu
	void __fastcall Delete(INT32 pIndex); // Vymazanie zaznamu
	INT32 __fastcall Find(CONST_PCHAR pValue, INT32 pStart = 0, INT32 pLength = -1); // Hladanie zaznamu od zadanej pozicie
	INT32 __fastcall CaseFind(CONST_PCHAR pValue, INT32 pStart = 0, INT32 pLength = -1); // Hladanie zaznamu od zadanej pozicie bez ohladu na velkost pismen
	void __fastcall CreateFromString(IString *pValue, CHAR pSeparator, bool pSkipEmpty = true); // Vytvorenie zoznamu z retazca
	bool __fastcall SaveToFile(CONST_PCHAR pFileName, bool pSkipEmpty = false, bool pTrimmed = false); // Ulozenie obsahu do suboru
	bool __fastcall LoadFromFile(CONST_PCHAR pFileName, bool pSkipEmpty = false, bool pTrimmed = false); // Nacitanie obsahu zo suboru
	void __fastcall ToString(IString *Result, CONST_PCHAR pSeparator = "\r\n"); // Zhustenie zoznamu retazcov do jedneho s oddelenim
public:
	INT32 __fastcall Count(void); // Ziskanie poctu zaznamov
	IString* __fastcall GetString(INT32 pIndex); // Ziskanie objektu
};
// ....................................................................................................................
